const Koa = require('koa');  
const Router = require('koa-router');  
const {koaBody} = require('koa-body');  
const sharp = require('sharp');  
const base64js = require('base64-js');  
  
const app = new Koa();  
const router = new Router();  
  
// 假设你有一个抠图函数  
async function segmentImage(buffer) {  
  // 在这里处理图像数据，例如使用深度学习模型进行抠图  
  // 返回处理后的图像数据（例如，Buffer）  
  // 这里仅作示例，实际实现需要根据你的抠图逻辑来编写  
  return buffer; // 假设直接返回原始图像数据作为示例  
}  
  
// 设置文件上传中间件  
app.use(koaBody({  
  multipart: true,  
  formidable: {  
    maxFileSize: 2000 * 1024 * 1024 // 设置上传文件大小限制，例如2MB  
  }  
}));  

  
// 定义路由  
router.post('/api/matting', async (ctx) => {  
  const file = ctx.request.files.image; // 获取上传的文件  
  if (!file) {  
    ctx.status = 400;  
    ctx.body = { error: 'No image part in the request' };  
    return;  
  }  
  
  // 读取文件内容到 Buffer  
  const imageBuffer = await sharp(file.path).toBuffer();  
  
  // 调用抠图函数处理图像  
  const segmentedBuffer = await segmentImage(imageBuffer);  
  
  // 将抠图后的图像数据编码为 Base64 字符串  
  const base64Image = base64js.fromByteArray(segmentedBuffer);  
  
  // 设置响应头为 image/png，并返回 Base64 编码的图像数据  
  ctx.set('Content-Type', 'image/png');  
  ctx.body = `data:image/png;base64,${base64Image}`;  
});  
  
// 使用路由中间件  
app.use(router.routes()).use(router.allowedMethods());  
  
// 启动服务器  
const PORT = process.env.PORT || 9090;  
app.listen(PORT, () => {  
  console.log(`Server is running on port ${PORT}`);  
});